package com.yu.yupicture.service;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yu.yupicture.model.domain.dto.picture.PictureQueryRequest;
import com.yu.yupicture.model.domain.dto.picture.PictureUpdateRequest;
import com.yu.yupicture.model.domain.dto.space.SpaceAddRequest;
import com.yu.yupicture.model.domain.dto.space.SpaceEditRequest;
import com.yu.yupicture.model.domain.dto.space.SpaceQueryRequest;
import com.yu.yupicture.model.domain.dto.space.SpaceUpdateRequest;
import com.yu.yupicture.model.domain.entry.Picture;
import com.yu.yupicture.model.domain.entry.Space;
import com.yu.yupicture.model.domain.entry.User;
import com.yu.yupicture.model.domain.vo.SpaceVO;

import java.util.List;

/**
 * @author Li Shuokang
 * @description 针对表【space(空间)】的数据库操作Service
 * @createDate 2025-08-03 14:15:13
 */
public interface SpaceService extends IService<Space> {


    /**
     * 分页查询（管理端，）
     *
     * @param SpaceQueryRequest
     * @return
     */
    Page<Space> page(SpaceQueryRequest SpaceQueryRequest);


    /**
     * 分页查询（用户）
     *
     * @param SpaceQueryRequest
     * @return
     */
    Page<SpaceVO> pageVo(SpaceQueryRequest SpaceQueryRequest, User loginUser);

    /**
     * 将空间集合进行转vo
     *
     * @param SpaceList
     * @return
     */
    List<SpaceVO> getSpaceListVoBySpace(List<Space> SpaceList);

    /**
     * 将单个空间进行转vo
     */
    SpaceVO getSpaceVoBySpace(Space Space);

    /**
     * 根据id查询 空间(用户端)
     */

    SpaceVO getSpaceVoById(Long id);

    /**
     * 根据id查询空间 -管理端
     *
     * @param id
     * @return
     */
    Space getSpaceById(Long id);

    /**
     * 根据id删除空间 -管理员
     */
    boolean deleteById(Long id);

    /**
     * 权限校验
     */
    void checkSpace(Space space, User loginUser);


    /**
     * 获取查询条件
     */
    QueryWrapper<Space> getQueryWrapper(SpaceQueryRequest spaceQueryRequest);

    /**
     * 更新空间 -管理员
     */
    boolean updateSpace(SpaceUpdateRequest spaceUpdateRequest);

    /**
     * 更新空间 -用户端
     */
    boolean userUpdateSpace(SpaceEditRequest spaceEditRequest, User loginUser);

    /**
     * 新增空间
     */

    Long addSpace(SpaceAddRequest spaceAddRequest,User loginUser);
}
